import static org.junit.Assert.*;


import org.junit.Test;
import org.junit.Before;

/*
 * En este test se prueba que las condiciones de victoria implementadas en la clase
 * PuertoRico sean correctas y que funcionen. Las pruebas sobre los casos en los que
 * aún no ha ganado nadie, en los que se gana gracias a los colonos y en los que se gana 
 * por Pv. En todos los casos las pruebas han resultado satisfactorias, pero, al implementar
 * el test en el que comprueba si se gana gracias a llenar el tablero de Edificios, el 
 * código falla por culpa de los constructores (al menos eso deduzco del log de errores), 
 * así que queda pendiente de una revisión.
 */


public class ZZTestCondicionDeVictoria {
	private static Recursos recursos = Recursos.getInstancia();
	private static Jugador jugadorRol;
	private static Fortaleza ed1 = new Fortaleza();
	private static Fabrica ed2 = new Fabrica();
	private static Cofradia ed3 = new Cofradia();
	private static Aduana ed4 = new Aduana();
	private static Agnileria ed5 = new Agnileria();
	private static AgnileriaPequegna ed6 = new AgnileriaPequegna();
	private static Almacen ed7 = new Almacen();
	private static AlmacenPequegno ed8 = new AlmacenPequegno();
	private static Ayuntamiento ed9 = new Ayuntamiento();
	private static Azucarera ed10 = new Azucarera();
	private static AzucareraPequegna ed11 = new AzucareraPequegna();
	private static Hospicio ed12 = new Hospicio();
	private static CasetaDeObra ed13 = new CasetaDeObra();
	
	@Before
	public void setUpBeforeClass() throws Exception {
		jugadorRol = new Jugador("Jeesse Caster");
		}
	
	@Test
	public void testNoGana() throws Exception{
		assertFalse (condicionDeVictoria());
	}
	
	@Test
	public void testGanaPorColonos() throws Exception{
		recursos.decrementaColonos(75);
		assertTrue (condicionDeVictoria());
	}
		
	@Test
	public void testGanaPorPv() throws Exception{
		recursos.decrementaPV(100);//Esta línea habrá que cambiarla en un futuro, ya que el método setPV de la clase Recursos debería de sustituirse por uno llamado "decrementaPV"
		assertTrue (condicionDeVictoria());
	}
	
	@Test
	public void testGanaPorEdificios() throws Exception{
		jugadorRol.addEdificio(ed1);
		jugadorRol.addEdificio(ed2);
		jugadorRol.addEdificio(ed3);
		jugadorRol.addEdificio(ed4);
		jugadorRol.addEdificio(ed5);
		jugadorRol.addEdificio(ed6);
		jugadorRol.addEdificio(ed7);
		jugadorRol.addEdificio(ed8);
		jugadorRol.addEdificio(ed9);
		jugadorRol.addEdificio(ed10);
		jugadorRol.addEdificio(ed11);
		jugadorRol.addEdificio(ed12);
		jugadorRol.addEdificio(ed13);
		assertTrue (condicionDeVictoria());
	}
	
	
	
	private boolean condicionDeVictoria(){//Completa
			
			if (recursos.getColonos()==0){
				return true;
				}
			
			if (recursos.getPV() == 0){
				return true;
				}
			
			if (jugadorRol.sizeOfEdificios()==13){
				return true;
			}
		
			return false;
		
	}

}
